from rest_framework import viewsets
from rest_framework.decorators import action
from rest_framework.response import Response

from BYD_ERP.utils.pagination import GlobalPagination
from erp_system.serializer.dept_serializer import DeptSerializer

from BYD_ERP.utils.base_views import MultipleDestroyMixin
from erp_system.models import DeptModel


class DeptView(viewsets.ModelViewSet, MultipleDestroyMixin):
    """
        create:
        部门--新增

        部门新增，status：201（成功），return：新增部门信息

        destroy：
        部门--删除单个部门

        部门删除，status：204（成功），return：None

        multiple_delete:
        部门--批量删除

        部门批量删除，status：204（成功），return：None

        update:
        部门--修改

        部门修改，status：200（成功），return：修改部门本身信息

        partial_update:
        部门--局部修改

        部门局部修改，status：200（成功）

        list:
        部门--查看

        获取所有的部门--
        请求参数有pid，父部门的ID。
           1.如果没有传pid，则查询所有的部门
           2.如果传过来的pid=0，则查询顶级部门列表
           3.如果传过来的pid=非0，则查询某个父部门下所有子部门列表

        retrieve:
        查询单个部门

        返回单个部门，status：200（成功），return：返回单个部门
    """

    queryset = DeptModel.objects.all()     # 设置一个默认值
    serializer_class = DeptSerializer
    pagination_class = GlobalPagination

    def get_queryset(self):
        """
        请求参数有pid，父部门的ID。
           1.如果没有传pid，则查询所有的部门
           2.如果传过来的pid=0，则查询顶级部门列表
           3.如果传过来的pid=非0，则查询某个父部门下所有子部门列表
        """

        pid = self.request.query_params.get('pid', None)

        if pid:
            integer_pid = int(pid)
            if integer_pid == 0:
                return DeptModel.objects.filter(parent__isnull=True).all()
            else:
                return DeptModel.objects.filter(parent__id=integer_pid).all()
        else:
            return DeptModel.objects.all()
